﻿<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:l="clr-namespace:Wpf.Controls">

	<BooleanToVisibilityConverter x:Key="boolConverter"/>
    <l:InverseBooleanConverter x:Key="_inverseBooleanConverter"/>
	<!-- 
		Brushes used to define the Look of the TabControl & TabItem
	-->
	<!-- Border Brush for the TabItems and TabControl -->
	<SolidColorBrush x:Key="TabBorderBrush" Color="LightGray"/>
	<!-- Tab Text Colour when Not Selected-->
	<SolidColorBrush x:Key="TabGrayTextBrush" Color="#FF444444"/>
	<!-- TabItem CloseButton Brush-->
	<SolidColorBrush x:Key="TabCloseButtonBrush" Color="#FFADADAD"/>

	<!-- TabItem Brushes -->
	<SolidColorBrush x:Key="TabItemNormalBackground" Color="WhiteSmoke"/>
	<SolidColorBrush x:Key="TabItemHoverBackground" Color="LightGray"/>
	<SolidColorBrush x:Key="TabItemSelectedBackground" Color="LightGray"/>

	<!-- Style for the Repeat Button used to scrool the Tabs to the Left-->
	<Style x:Key="RepeatButtonScrollLeftOrUpStyle" TargetType="{x:Type RepeatButton}">
		<Setter Property="Foreground" Value="{StaticResource TabGrayTextBrush}" />
		<Setter Property="Background" Value="{Binding Path=TabItemNormalBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}"/>
		<Setter Property="BorderBrush" Value="{Binding Path=BorderBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
		<Setter Property="SnapsToDevicePixels" Value="True"/>
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type RepeatButton}">
					<Border x:Name="outerBorder"
						Background="{TemplateBinding Background}"
						BorderBrush="{TemplateBinding BorderBrush}"
						BorderThickness="1"
						Padding="{TemplateBinding Padding}"
						CornerRadius="3,3,0,0">

						<Border x:Name="innerBorder" BorderThickness="1" BorderBrush="Transparent" Background="Transparent" Padding="4,0,4,0">
							<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
								<Path x:Name="path1" Stroke="{TemplateBinding Foreground}" Fill="Transparent" Data="M 3,0 L0,3 3,6" />
								<Path x:Name="path2" Stroke="{TemplateBinding Foreground}" Fill="Transparent" Data="M 7,0 L4,3 7,6" />
							</Grid>
						</Border>

					</Border>
					<ControlTemplate.Triggers>
						<Trigger Property="IsMouseOver" Value="true">
							<Setter Property="Background" Value="{Binding Path=TabItemMouseOverBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
							<Setter Property="Foreground" Value="Black"/>
						</Trigger>
						<Trigger Property="IsPressed" Value="True">
							<Setter Property="Background" Value="{Binding Path=TabItemMouseOverBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
							<Setter Property="Background" TargetName="innerBorder" Value="#11000000"/>
							<Setter Property="BorderBrush" TargetName="innerBorder" Value="#66000000" />
							<Setter Property="Foreground" Value="Black"/>
							<Setter Property="CornerRadius" TargetName="innerBorder" Value="3,3,0,0"/>
							<Setter Property="BorderThickness" TargetName="innerBorder" Value="1,2,1,0" />
						</Trigger>

						<DataTrigger Binding="{Binding Path=TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" Value="Left">
							<Setter Property="Data" TargetName="path1" Value="M 0,3 L3,0 6,3"/>
							<Setter Property="Data" TargetName="path2" Value="M 0,7 L3,4 6,7"/>
						</DataTrigger>
						<DataTrigger Binding="{Binding Path=TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" Value="Right">
							<Setter Property="Data" TargetName="path1" Value="M 0,3 L3,0 6,3"/>
							<Setter Property="Data" TargetName="path2" Value="M 0,7 L3,4 6,7"/>
						</DataTrigger>
						<DataTrigger Binding="{Binding Path=TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" Value="Bottom">
							<Setter Property="CornerRadius" TargetName="outerBorder" Value="0,0,3,3"/>
						</DataTrigger>

					</ControlTemplate.Triggers>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>

	<!-- Style for the Repeat Button used to scrool the Tabs to the Right-->
	<Style x:Key="RepeatButtonScrollRightOrDownStyle" TargetType="{x:Type RepeatButton}">
		<Setter Property="Foreground" Value="{StaticResource TabGrayTextBrush}" />
		<Setter Property="Background" Value="{Binding Path=TabItemNormalBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}"/>
		<Setter Property="BorderBrush" Value="{Binding Path=BorderBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
		<Setter Property="SnapsToDevicePixels" Value="True"/>
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type RepeatButton}">
					<Border x:Name="outerBorder"
						Background="{TemplateBinding Background}"
						BorderBrush="{TemplateBinding BorderBrush}"
						BorderThickness="1"
						Padding="{TemplateBinding Padding}"
						CornerRadius="3,3,0,0">
						<Border x:Name="innerBorder" BorderThickness="1" BorderBrush="Transparent" Background="Transparent" Padding="4,0,4,0">
							<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
								<Path x:Name="path1" Stroke="{TemplateBinding Foreground}" Fill="Transparent" Data="M 0,0 L3,3 0,6" />
								<Path x:Name="path2" Stroke="{TemplateBinding Foreground}" Fill="Transparent" Data="M 4,0 L7,3 4,6" />
							</Grid>
						</Border>
					</Border>
					<ControlTemplate.Triggers>
						<Trigger Property="IsMouseOver" Value="true">
							<Setter Property="Background" Value="{Binding Path=TabItemMouseOverBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
							<Setter Property="Foreground" Value="Black"/>
						</Trigger>
						<Trigger Property="IsPressed" Value="True">
							<Setter Property="Background" Value="{Binding Path=TabItemMouseOverBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
							<Setter Property="Background" TargetName="innerBorder" Value="#11000000"/>
							<Setter Property="BorderBrush" TargetName="innerBorder" Value="#66000000" />
							<Setter Property="Foreground" Value="Black"/>
							<Setter Property="CornerRadius" TargetName="innerBorder" Value="3,3,0,0"/>
							<Setter Property="BorderThickness" TargetName="innerBorder" Value="1,2,1,0" />
						</Trigger>

						<DataTrigger Binding="{Binding Path=TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" Value="Left">
							<Setter Property="Data" TargetName="path1" Value="M 0,0 L3,3 6,0"/>
							<Setter Property="Data" TargetName="path2" Value="M 0,4 L3,7 6,4"/>
							<Setter Property="CornerRadius" TargetName="outerBorder" Value="0,0,3,3"/>
							<Setter Property="CornerRadius" TargetName="innerBorder" Value="0,0,3,3"/>
						</DataTrigger>
						<DataTrigger Binding="{Binding Path=TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" Value="Right">
							<Setter Property="Data" TargetName="path1" Value="M 0,0 L3,3 6,0"/>
							<Setter Property="Data" TargetName="path2" Value="M 0,4 L3,7 6,4"/>
							<Setter Property="CornerRadius" TargetName="outerBorder" Value="0,0,3,3"/>
							<Setter Property="CornerRadius" TargetName="innerBorder" Value="0,0,3,3"/>
						</DataTrigger>
						<DataTrigger Binding="{Binding Path=TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" Value="Bottom">
							<Setter Property="CornerRadius" TargetName="outerBorder" Value="0,0,3,3"/>
							<Setter Property="CornerRadius" TargetName="innerBorder" Value="0,0,3,3"/>
						</DataTrigger>
					</ControlTemplate.Triggers>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>

	<!-- Style for the Toggle Button which displays a cntext menu listing all the Tab Headers-->
	<Style x:Key="DropDownToggleButtonStyle" TargetType="{x:Type ToggleButton}">
		<Setter Property="Background" Value="{Binding Path=TabItemNormalBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}"/>
		<Setter Property="BorderBrush" Value="{Binding Path=BorderBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}"/>
		<Setter Property="Foreground" Value="{StaticResource TabGrayTextBrush}"/>
		<Setter Property="SnapsToDevicePixels" Value="True"/>
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type ToggleButton}">
					<Border x:Name="outerBorder" CornerRadius="3,3,0,0" BorderThickness="1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" >
						<Border x:Name="innerBorder" CornerRadius="3,3,0,0">
							<Grid HorizontalAlignment="Center" VerticalAlignment="Center" ClipToBounds="False" Margin="0,1,0,0" SnapsToDevicePixels="False">
								<Path Stroke="{TemplateBinding Foreground}" Data="M1,1L3,4 5,1z" Fill="{TemplateBinding Foreground}" ClipToBounds="False" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="True"/>
							</Grid>
						</Border>
					</Border>
					<ControlTemplate.Triggers>
						<Trigger Property="IsMouseOver" Value="true">
							<Setter Property="Background" Value="{Binding Path=TabItemMouseOverBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
							<Setter Property="Foreground" Value="Black"/>
						</Trigger>
						<Trigger Property="IsChecked" Value="True">
							<Setter Property="Background" Value="{Binding Path=TabItemMouseOverBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
							<Setter Property="Background" TargetName="innerBorder" Value="#11000000"/>
							<Setter Property="BorderBrush" TargetName="innerBorder" Value="#66000000" />
							<Setter Property="Foreground" Value="Black"/>
							<Setter Property="Margin" TargetName="innerBorder" Value="-1"/>
							<Setter Property="CornerRadius" TargetName="innerBorder" Value="3,3,0,0"/>
							<Setter Property="BorderThickness" TargetName="innerBorder" Value="1,2,1,0" />
						</Trigger>

						<DataTrigger Binding="{Binding Path=TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" Value="Bottom">
							<Setter Property="CornerRadius" TargetName="outerBorder" Value="0,0,3,3"/>
							<Setter Property="CornerRadius" TargetName="innerBorder" Value="0,0,3,3"/>
						</DataTrigger>
					</ControlTemplate.Triggers>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>

	<!-- Style for the New Tab Button -->
	<Style x:Key="NewTabButtonStyle" TargetType="{x:Type Button}">
		<Setter Property="Background" Value="{Binding Path=TabItemNormalBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}"/>
		<Setter Property="BorderBrush" Value="{Binding Path=BorderBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}"/>
		<Setter Property="Foreground" Value="{StaticResource TabGrayTextBrush}"/>
		<Setter Property="SnapsToDevicePixels" Value="True"/>
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type Button}">
					<Border CornerRadius="3,3,0,0" BorderThickness="1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" x:Name="outerBorder">
						<Border x:Name="innerBorder" CornerRadius="3,3,0,0">
							<Grid HorizontalAlignment="Center" VerticalAlignment="Center" Width="16" Height="16" Margin="0,1,0,0" SnapsToDevicePixels="False">
								<ContentPresenter x:Name="Cp" Opacity="0.4" />
							</Grid>
						</Border>
					</Border>
					<ControlTemplate.Triggers>
						<Trigger Property="IsMouseOver" Value="true">
							<Setter Property="Background" Value="{Binding Path=TabItemMouseOverBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
							<Setter Property="Foreground" Value="Black"/>
							<Setter Property="Opacity" TargetName="Cp" Value="1"/>
						</Trigger>
						<Trigger Property="IsPressed" Value="True">
							<Setter Property="Background" Value="{Binding Path=TabItemMouseOverBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
							<Setter Property="Background" TargetName="innerBorder" Value="#11000000"/>
							<Setter Property="BorderBrush" TargetName="innerBorder" Value="#66000000" />
							<Setter Property="Foreground" Value="Black"/>
							<Setter Property="Margin" TargetName="innerBorder" Value="-1"/>
							<Setter Property="CornerRadius" TargetName="innerBorder" Value="3,3,0,0"/>
							<Setter Property="BorderThickness" TargetName="innerBorder" Value="1,2,1,0" />
						</Trigger>
						<DataTrigger Binding="{Binding Path=TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" Value="Bottom">
							<Setter Property="CornerRadius" TargetName="outerBorder" Value="0,0,3,3"/>
							<Setter Property="CornerRadius" TargetName="innerBorder" Value="0,0,3,3"/>
						</DataTrigger>
					</ControlTemplate.Triggers>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>

	<!-- Style for the Close Button on each TabItem -->
	<Style x:Key="CloseButtonStyle" TargetType="{x:Type Button}">
		<Setter Property="BorderBrush" Value="Transparent"/>
		<Setter Property="Background" Value="Transparent"/>
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type Button}">
					<Border x:Name="border" 
						CornerRadius="2" 
						Background="{TemplateBinding Background}" 
						BorderThickness="1" 
						BorderBrush="{TemplateBinding BorderBrush}" 
						Width="16" Height="16" 
						SnapsToDevicePixels="True">
						<Grid Width="8" Height="8" HorizontalAlignment="Center" VerticalAlignment="Center">
							<Path x:Name="path1" Stroke="{StaticResource TabCloseButtonBrush}" Data="M0,0 L8,8" StrokeThickness="2" />
							<Path x:Name="path2" Stroke="{StaticResource TabCloseButtonBrush}" Data="M8,0 L0,8" StrokeThickness="2" />
						</Grid>
					</Border>
					<ControlTemplate.Triggers>
						<Trigger Property="IsMouseOver" Value="True">
							<Setter Property="BorderBrush" Value="{StaticResource TabCloseButtonBrush}"/>
							<Setter Property="Background" Value="WhiteSmoke"/>
							<Setter Property="Stroke" TargetName="path1" Value="DarkRed"/>
							<Setter Property="Stroke" TargetName="path2" Value="DarkRed"/>
						</Trigger>
						<Trigger Property="IsPressed" Value="True">
							<Setter Property="Background">
								<Setter.Value>
									<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
										<GradientStop Color="#FFADADAD" Offset="0"/>
										<GradientStop Color="White" Offset="0.5"/>
										<GradientStop Color="White" Offset="1"/>
									</LinearGradientBrush>
								</Setter.Value>
							</Setter>
						</Trigger>
					</ControlTemplate.Triggers>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>

	<!-- TabItem Style, defines the look of a Tab Item-->
	<Style TargetType="{x:Type l:TabItem}">
		<Setter Property="Background" Value="{Binding Path=TabItemNormalBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}"/>
		<Setter Property="BorderBrush" Value="{Binding Path=BorderBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}"/>
		<Setter Property="Padding" Value="5" />
		<Setter Property="HorizontalAlignment" Value="Stretch" />
		<Setter Property="VerticalAlignment" Value="Stretch" />
		<Setter Property="HorizontalContentAlignment" Value="Stretch" />
		<Setter Property="VerticalContentAlignment" Value="Stretch" />
		<Setter Property="SnapsToDevicePixels" Value="True"/>
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="{x:Type l:TabItem}">
					<Border x:Name="Bd"
							Background="{TemplateBinding Background}"
							BorderBrush="{TemplateBinding BorderBrush}"
							SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
						<Grid HorizontalAlignment="Stretch">
							<Grid.ColumnDefinitions>
								<ColumnDefinition Width="Auto"/>
								<ColumnDefinition Width="*"/>
								<ColumnDefinition Width="Auto"/>
							</Grid.ColumnDefinitions>

							<ContentPresenter Content="{TemplateBinding Icon}" HorizontalAlignment="Center" VerticalAlignment="Center"/>

							<Border Margin="2,0,2,0" Grid.Column="1">
								<ContentPresenter
									    Content="{TemplateBinding Header}"
									    ContentTemplate="{TemplateBinding HeaderTemplate}"
									    ContentSource="Header"
										HorizontalAlignment="Stretch"
										VerticalAlignment="Center"
									    SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
									    Margin="{TemplateBinding Padding}"
									    RecognizesAccessKey="True"/>
							</Border>

							<Button x:Name="PART_CloseButton" 
								Grid.Column="2" 
								VerticalAlignment="Center"
								HorizontalAlignment="Center"
								Margin="5,0,5,0"
								Style="{StaticResource CloseButtonStyle}"
								Visibility="Visible"
								/>
						</Grid>
					</Border>
					<ControlTemplate.Triggers>
						<Trigger Property="IsMouseOver" Value="true">
							<Setter Property="Background" Value="{Binding Path=TabItemMouseOverBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
							<Setter Property="Foreground" Value="Black"/>
						</Trigger>
						<Trigger Property="IsSelected" Value="true">
							<Setter Property="Background" Value="{Binding Path=TabItemSelectedBackground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:TabControl}}}" />
							<Setter Property="Foreground" Value="Black"/>
							<Setter Property="Margin" TargetName="Bd" Value="0"/>
						</Trigger>

						<Trigger Property="TabStripPlacement" Value="Top">
							<Setter Property="BorderThickness" TargetName="Bd" Value="1,1,1,0"/>
							<Setter Property="CornerRadius" TargetName="Bd" Value="4,4,0,0"/>
							<Setter Property="Margin" TargetName="Bd" Value="0,7,0,-1"/>
						</Trigger>

						<Trigger Property="TabStripPlacement" Value="Bottom">
							<Setter Property="BorderThickness" TargetName="Bd" Value="1,0,1,1"/>
							<Setter Property="CornerRadius" TargetName="Bd" Value="0,0,4,4"/>
							<Setter Property="Margin" TargetName="Bd" Value="0,-1,0,7"/>
						</Trigger>

						<Trigger Property="TabStripPlacement" Value="Left">
							<Setter Property="BorderThickness" TargetName="Bd" Value="1,1,0,1"/>
							<Setter Property="CornerRadius" TargetName="Bd" Value="4,0,0,0"/>
							<Setter Property="Margin" TargetName="Bd" Value="0,0,0,-1"/>
						</Trigger>

						<Trigger Property="TabStripPlacement" Value="Right">
							<Setter Property="BorderThickness" TargetName="Bd" Value="0,1,1,1"/>
							<Setter Property="CornerRadius" TargetName="Bd" Value="0,4,0,0"/>
							<Setter Property="Margin" TargetName="Bd" Value="0,0,0,-1"/>
						</Trigger>
                        
                        <Trigger Property="AllowDelete" Value="false">
                            <Setter Property="Visibility" TargetName="PART_CloseButton" Value="Collapsed"/> 
                        </Trigger>  

						<MultiTrigger>
							<MultiTrigger.Conditions>
								<Condition Property="TabStripPlacement" Value="Top"/>
								<Condition Property="IsSelected" Value="true"/>
							</MultiTrigger.Conditions>
							<Setter Property="Panel.ZIndex" Value="2" />
							<Setter Property="BorderThickness" TargetName="Bd" Value="1,1,1,0"/>
							<Setter Property="CornerRadius" TargetName="Bd" Value="4,4,0,0"/>
							<Setter Property="Margin" TargetName="Bd" Value="0,0,0,-1"/>
						</MultiTrigger>

						<MultiTrigger>
							<MultiTrigger.Conditions>
								<Condition Property="TabStripPlacement" Value="Bottom"/>
								<Condition Property="IsSelected" Value="true"/>
							</MultiTrigger.Conditions>
							<Setter Property="Panel.ZIndex" Value="2" />
							<Setter Property="BorderThickness" TargetName="Bd" Value="1,0,1,1"/>
							<Setter Property="CornerRadius" TargetName="Bd" Value="0,0,4,4"/>
							<Setter Property="Margin" TargetName="Bd" Value="0,-1,0,0"/>
						</MultiTrigger>

						<MultiTrigger>
							<MultiTrigger.Conditions>
								<Condition Property="TabStripPlacement" Value="Left"/>
								<Condition Property="IsSelected" Value="true"/>
							</MultiTrigger.Conditions>
							<Setter Property="Panel.ZIndex" Value="2" />
							<Setter Property="BorderThickness" TargetName="Bd" Value="1,1,0,1"/>
							<Setter Property="CornerRadius" TargetName="Bd" Value="4,0,0,4"/>
							<Setter Property="Margin" TargetName="Bd" Value="0,0,0,-1"/>
						</MultiTrigger>

						<MultiTrigger>
							<MultiTrigger.Conditions>
								<Condition Property="TabStripPlacement" Value="Right"/>
								<Condition Property="IsSelected" Value="true"/>
							</MultiTrigger.Conditions>
							<Setter Property="Panel.ZIndex" Value="2" />
							<Setter Property="BorderThickness" TargetName="Bd" Value="1,1,1,1"/>
							<Setter Property="CornerRadius" TargetName="Bd" Value="0,4,0,0"/>
							<Setter Property="Margin" TargetName="Bd" Value="0,0,0,-1"/>
						</MultiTrigger>
					</ControlTemplate.Triggers>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>

	<!-- Control Template for TabStripPlacement Top-->
	<ControlTemplate x:Key="TabControlTabPlacementTop" TargetType="{x:Type l:TabControl}">
		<Grid SnapsToDevicePixels="{Binding Path=SnapsToDevicePixels, RelativeSource={RelativeSource TemplatedParent}}" KeyboardNavigation.TabNavigation="Local">
			<Grid.ColumnDefinitions>
				<ColumnDefinition Width="Auto"/>
				<ColumnDefinition Width="Auto"/>
				<ColumnDefinition Width="Auto"/>
				<ColumnDefinition Width="*" />
				<ColumnDefinition Width="Auto"/>
			</Grid.ColumnDefinitions>
			<Grid.RowDefinitions>
				<RowDefinition x:Name="RowDefinition0" Height="Auto" />
				<RowDefinition x:Name="RowDefinition1" Height="*" />
			</Grid.RowDefinitions>

			<Border Grid.ColumnSpan="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Transparent"/>

			<!-- Toggle button which displays a context menu with a menu item for each tab which can be used to select a tab that is not in view-->
			<ToggleButton 
                x:Name="PART_DropDown" 
                Height="22"
                Width="16"
                VerticalAlignment="Bottom"
                Margin="0,0,0,-1"
                Grid.Column="0" 
                KeyboardNavigation.TabIndex="1"
                Style="{StaticResource DropDownToggleButtonStyle}" 
                Visibility="{Binding IsUsingItemsSource, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource _inverseBooleanConverter}}"
                ToolTip="Display all the tabs in a menu"/>

			<Button 
                x:Name="PART_NewTabButton" 
                Grid.Column="1" 
                Height="22"
                VerticalAlignment="Bottom"
                Margin="-1,5,0,-1" 
                KeyboardNavigation.TabIndex="2"
                Style="{StaticResource NewTabButtonStyle}" 
                Width="24"
				Visibility="{Binding Path=AllowAddNew, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource boolConverter}}"
				ToolTip="Add a New tab">

				<Image Source="pack://application:,,,/Wpf.TabControl;component/Images/newtab.ico"/>
			</Button>

			<!-- Repeat Buttons used for scrolling the TabItems into view-->
			<RepeatButton 
                x:Name="PART_RepeatLeft" 
                Panel.ZIndex="1" 
                Grid.Column="2" 
                Height="22"
                KeyboardNavigation.TabIndex="3"
                VerticalAlignment="Bottom"
                Style="{StaticResource RepeatButtonScrollLeftOrUpStyle}" 
                Margin="-1,5,0,-1" 
                ToolTip="Scroll the Tab Items to the Left" 
				Visibility="{Binding ElementName=TabPanel, Path=CanScrollLeftOrUp, Converter={StaticResource boolConverter}}"/>

			<ScrollViewer x:Name="PART_ScrollViewer" Grid.Column="3" Panel.ZIndex="1" CanContentScroll="True" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Hidden">
				<l:TabPanel x:Name="TabPanel" IsItemsHost="True" SnapsToDevicePixels="True" />
			</ScrollViewer>

			<RepeatButton 
                x:Name="PART_RepeatRight" 
                Panel.ZIndex="1" 
                Grid.Column="4" 
                Height="22"
                VerticalAlignment="Bottom"
                Style="{StaticResource RepeatButtonScrollRightOrDownStyle}" 
                Margin="-1,5,0,-1" 
                ToolTip="Scroll the Tab Items to the Right" 
                Visibility="{Binding ElementName=TabPanel, Path=CanScrollRightOrDown, Converter={StaticResource boolConverter}}" />

			<!-- Content Panel-->
			<Border x:Name="ContentPanel"
				Grid.ColumnSpan="5" Grid.Row="1"
				Background="{Binding Path=Background, RelativeSource={RelativeSource TemplatedParent}}" 
                BorderBrush="{Binding Path=BorderBrush, RelativeSource={RelativeSource TemplatedParent}}"
                BorderThickness="{Binding Path=BorderThickness, RelativeSource={RelativeSource TemplatedParent}}"
				KeyboardNavigation.DirectionalNavigation="Contained"
				KeyboardNavigation.TabIndex="5"
				KeyboardNavigation.TabNavigation="Local">
				<ContentPresenter x:Name="PART_SelectedContentHost"
				    Content="{Binding Path=SelectedContent, RelativeSource={RelativeSource TemplatedParent}}"
				    ContentSource="SelectedContent"
                    ContentTemplate="{Binding Path=ContentTemplate, RelativeSource={RelativeSource TemplatedParent}}"
				    SnapsToDevicePixels="{Binding Path=SnapsToDevicePixels, RelativeSource={RelativeSource TemplatedParent}}"
				    Margin="{Binding Path=Padding, RelativeSource={RelativeSource TemplatedParent}}" />
			</Border>
		</Grid>
	</ControlTemplate>

	<!-- Control Template for TabStripPlacement Bottom-->
	<ControlTemplate x:Key="TabControlTabPlacementBottom" TargetType="{x:Type l:TabControl}">
		<Grid SnapsToDevicePixels="{Binding Path=SnapsToDevicePixels, RelativeSource={RelativeSource TemplatedParent}}" KeyboardNavigation.TabNavigation="Local">
			<Grid.ColumnDefinitions>
				<ColumnDefinition Width="Auto"/>
				<ColumnDefinition Width="Auto"/>
				<ColumnDefinition Width="Auto"/>
				<ColumnDefinition Width="*" />
				<ColumnDefinition Width="Auto"/>
			</Grid.ColumnDefinitions>
			<Grid.RowDefinitions>
				<RowDefinition x:Name="RowDefinition0" Height="*" />
				<RowDefinition x:Name="RowDefinition1" Height="Auto" />
			</Grid.RowDefinitions>

			<!-- Toggle button which displays a context menu with a menu item for each tab which can be used to select a tab that is not in view-->
			<ToggleButton 
                x:Name="PART_DropDown" 
                Grid.Row="1"
                Height="22"
                Width="16"
                VerticalAlignment="Top"
                Margin="0,-1,0,0"
                Grid.Column="0" 
                Style="{StaticResource DropDownToggleButtonStyle}" 
                Visibility="{Binding IsUsingItemsSource, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource _inverseBooleanConverter}}"
                ToolTip="Display all the tabs in a menu"/>

			<Button 
                x:Name="PART_NewTabButton" 
                Grid.Row="1"
                Grid.Column="1" 
                Height="22"
                VerticalAlignment="Top"
                Margin="-1,-1,0,0" 
                Style="{StaticResource NewTabButtonStyle}" 
                Width="24"
				Visibility="{Binding Path=AllowAddNew, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource boolConverter}}"
				ToolTip="Add a New tab">

				<Image Source="pack://application:,,,/Wpf.TabControl;component/Images/newtab.ico"/>
			</Button>

			<!-- Repeat Buttons used for scrolling the TabItems into view-->
			<RepeatButton 
                x:Name="PART_RepeatLeft" 
                Panel.ZIndex="1" 
                Grid.Row="1"
                Grid.Column="2" 
                Height="22"
                VerticalAlignment="Top"
                Style="{StaticResource RepeatButtonScrollLeftOrUpStyle}" 
                Margin="-1,-1,0,0" 
                ToolTip="Scroll the Tab Items to the Left" 
				Visibility="{Binding ElementName=TabPanel, Path=CanScrollLeftOrUp, Converter={StaticResource boolConverter}}"/>

			<ScrollViewer x:Name="PART_ScrollViewer" Grid.Row="1" Grid.Column="3" Panel.ZIndex="1" CanContentScroll="True" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Hidden">
				<l:TabPanel x:Name="TabPanel" IsItemsHost="True" SnapsToDevicePixels="True" />
			</ScrollViewer>

			<RepeatButton 
                x:Name="PART_RepeatRight" 
                Panel.ZIndex="1" 
                Grid.Row="1"
                Grid.Column="4" 
                Height="22"
                VerticalAlignment="Top"
                Style="{StaticResource RepeatButtonScrollRightOrDownStyle}" 
                Margin="-1,-1,0,0" 
                ToolTip="Scroll the Tab Items to the Right" 
                Visibility="{Binding ElementName=TabPanel, Path=CanScrollRightOrDown, Converter={StaticResource boolConverter}}" />

			<!-- Content Panel-->
			<Border x:Name="ContentPanel"
				Grid.ColumnSpan="5" 
				Grid.Row="0"
				Background="{Binding Path=Background, RelativeSource={RelativeSource TemplatedParent}}" 
                BorderBrush="{Binding Path=BorderBrush, RelativeSource={RelativeSource TemplatedParent}}"
                BorderThickness="{Binding Path=BorderThickness, RelativeSource={RelativeSource TemplatedParent}}"
				KeyboardNavigation.DirectionalNavigation="Contained"
				KeyboardNavigation.TabIndex="2"
				KeyboardNavigation.TabNavigation="Local">
				<ContentPresenter x:Name="PART_SelectedContentHost"
				    Content="{Binding Path=SelectedContent, RelativeSource={RelativeSource TemplatedParent}}"
				    ContentSource="SelectedContent"
                    ContentTemplate="{Binding Path=ContentTemplate, RelativeSource={RelativeSource TemplatedParent}}"
				    SnapsToDevicePixels="{Binding Path=SnapsToDevicePixels, RelativeSource={RelativeSource TemplatedParent}}"
				    Margin="{Binding Path=Padding, RelativeSource={RelativeSource TemplatedParent}}" />
			</Border>
		</Grid>
	</ControlTemplate>

	<!-- Control Template for TabStripPlacement Left-->
	<ControlTemplate x:Key="TabControlTabPlacementLeft" TargetType="{x:Type l:TabControl}">
		<Grid SnapsToDevicePixels="{Binding Path=SnapsToDevicePixels, RelativeSource={RelativeSource TemplatedParent}}" KeyboardNavigation.TabNavigation="Local">
			<Grid.RowDefinitions>
				<RowDefinition Height="20"/>
				<RowDefinition Height="*" />
				<RowDefinition Height="20"/>
			</Grid.RowDefinitions>
			<Grid.ColumnDefinitions>
				<ColumnDefinition Width="Auto" />
				<ColumnDefinition Width="*" />
			</Grid.ColumnDefinitions>

			<Border Grid.RowSpan="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{Binding Path=Background, RelativeSource={RelativeSource TemplatedParent}}"/>

			<Grid Grid.Row="0">
				<Grid.ColumnDefinitions>
					<ColumnDefinition Width="*" />
					<ColumnDefinition Width="Auto" />
					<ColumnDefinition Width="Auto" />
				</Grid.ColumnDefinitions>

				<!-- Repeat Buttons used for scrolling the TabItems into view-->
				<RepeatButton 
                    x:Name="PART_RepeatLeft" 
                    Panel.ZIndex="1" 
                    Grid.Column="0" 
                    Style="{StaticResource RepeatButtonScrollLeftOrUpStyle}" 
                    Margin="0,0,0,-1" 
                    ToolTip="Scroll the Tab Items to the Top" 
                    Visibility="{Binding ElementName=TabPanel, Path=CanScrollLeftOrUp, Converter={StaticResource boolConverter}}"/>

				<!-- Toggle button which displays a context menu with a menu item for each tab which can be used to select a tab that is not in view-->
				<ToggleButton x:Name="PART_DropDown" Grid.Column="1" Margin="-1,0,0,-1" Style="{StaticResource DropDownToggleButtonStyle}" ToolTip="Display all the tabs in a menu" Width="20" Panel.ZIndex="1"
                              Visibility="{Binding IsUsingItemsSource, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource _inverseBooleanConverter}}"/>

				<Button x:Name="PART_NewTabButton" Grid.Column="2" Margin="-1,0,0,-1" Style="{StaticResource NewTabButtonStyle}" Width="24"  Panel.ZIndex="1"
				    Visibility="{Binding Path=AllowAddNew, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource boolConverter}}"
				    ToolTip="Add a New tab">

					<Image Source="pack://application:,,,/Wpf.TabControl;component/Images/newtab.ico"/>
				</Button>
			</Grid>

			<ScrollViewer x:Name="PART_ScrollViewer" Grid.Row="1" Panel.ZIndex="1" CanContentScroll="True" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Disabled">
				<l:TabPanel x:Name="TabPanel" IsItemsHost="True" />
			</ScrollViewer>

			<RepeatButton 
                x:Name="PART_RepeatRight" 
                Panel.ZIndex="1" 
                Grid.Row="2" 
                Style="{StaticResource RepeatButtonScrollRightOrDownStyle}" 
                ToolTip="Scroll the Tab Items to the Bottom" 
                Visibility="{Binding ElementName=TabPanel, Path=CanScrollRightOrDown, Converter={StaticResource boolConverter}}"/>

			<!-- Content Panel-->
			<Border x:Name="ContentPanel"
				Grid.Column="1" Grid.RowSpan="3"
				Background="{Binding Path=Background, RelativeSource={RelativeSource TemplatedParent}}" 
                BorderBrush="{Binding Path=BorderBrush, RelativeSource={RelativeSource TemplatedParent}}"
                BorderThickness="{Binding Path=BorderThickness, RelativeSource={RelativeSource TemplatedParent}}"
				KeyboardNavigation.DirectionalNavigation="Contained"
				KeyboardNavigation.TabIndex="2"
				KeyboardNavigation.TabNavigation="Local">
				<ContentPresenter x:Name="PART_SelectedContentHost"
				    Content="{Binding Path=SelectedContent, RelativeSource={RelativeSource TemplatedParent}}"
				    ContentSource="SelectedContent"
                    ContentTemplate="{Binding Path=ContentTemplate, RelativeSource={RelativeSource TemplatedParent}}"
				    SnapsToDevicePixels="{Binding Path=SnapsToDevicePixels, RelativeSource={RelativeSource TemplatedParent}}"
				    Margin="{Binding Path=Padding, RelativeSource={RelativeSource TemplatedParent}}"/>
			</Border>
		</Grid>
	</ControlTemplate>

	<!-- Control Template for TabStripPlacement Right-->
	<ControlTemplate x:Key="TabControlTabPlacementRight" TargetType="{x:Type l:TabControl}">
		<Grid SnapsToDevicePixels="{Binding Path=SnapsToDevicePixels, RelativeSource={RelativeSource TemplatedParent}}" KeyboardNavigation.TabNavigation="Local">
			<Grid.RowDefinitions>
				<RowDefinition Height="20"/>
				<RowDefinition Height="*" />
				<RowDefinition Height="20"/>
			</Grid.RowDefinitions>
			<Grid.ColumnDefinitions>
				<ColumnDefinition Width="*" />
				<ColumnDefinition Width="Auto" />
			</Grid.ColumnDefinitions>

			<Border Grid.RowSpan="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{Binding Path=Background, RelativeSource={RelativeSource TemplatedParent}}"/>

			<Grid Grid.Row="0" Grid.Column="1">
				<Grid.ColumnDefinitions>
					<ColumnDefinition Width="Auto" />
					<ColumnDefinition Width="Auto" />
					<ColumnDefinition Width="*" />
				</Grid.ColumnDefinitions>

				<!-- Repeat Buttons used for scrolling the TabItems into view-->
				<RepeatButton 
                    x:Name="PART_RepeatLeft" 
                    Panel.ZIndex="1" 
                    Grid.Column="2" 
                    Style="{StaticResource RepeatButtonScrollLeftOrUpStyle}" 
                    Margin="0,0,0,-1" 
                    ToolTip="Scroll the Tab Items to the Top" 
                    Visibility="{Binding ElementName=TabPanel, Path=CanScrollLeftOrUp, Converter={StaticResource boolConverter}}"/>

				<!-- Toggle button which displays a context menu with a menu item for each tab which can be used to select a tab that is not in view-->
				<ToggleButton x:Name="PART_DropDown" Grid.Column="1" Margin="-1,0,0,-1" Style="{StaticResource DropDownToggleButtonStyle}" ToolTip="Display all the tabs in a menu" Width="20" Panel.ZIndex="1"
                              Visibility="{Binding IsUsingItemsSource, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource _inverseBooleanConverter}}"/>

				<Button x:Name="PART_NewTabButton" Grid.Column="0" Margin="-1,0,0,-1" Style="{StaticResource NewTabButtonStyle}" Width="24"  Panel.ZIndex="1"
				    Visibility="{Binding Path=AllowAddNew, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource boolConverter}}"
				    ToolTip="Add a New tab">

					<Image Source="pack://application:,,,/Wpf.TabControl;component/Images/newtab.ico"/>
				</Button>
			</Grid>

			<ScrollViewer x:Name="PART_ScrollViewer" Grid.Row="1" Grid.Column="1" Panel.ZIndex="1" CanContentScroll="True" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Disabled">
				<l:TabPanel x:Name="TabPanel" IsItemsHost="True" />
			</ScrollViewer>

			<RepeatButton 
                x:Name="PART_RepeatRight" 
                Panel.ZIndex="1" 
                Grid.Row="2" 
                Grid.Column="1"
                Style="{StaticResource RepeatButtonScrollRightOrDownStyle}" 
                ToolTip="Scroll the Tab Items to the Bottom" 
                Visibility="{Binding ElementName=TabPanel, Path=CanScrollRightOrDown, Converter={StaticResource boolConverter}}"/>

			<!-- Content Panel-->
			<Border x:Name="ContentPanel"
				Grid.RowSpan="3"
				Background="{Binding Path=Background, RelativeSource={RelativeSource TemplatedParent}}" 
                BorderBrush="{Binding Path=BorderBrush, RelativeSource={RelativeSource TemplatedParent}}"
                BorderThickness="{Binding Path=BorderThickness, RelativeSource={RelativeSource TemplatedParent}}"
				KeyboardNavigation.DirectionalNavigation="Contained"
				KeyboardNavigation.TabIndex="2"
				KeyboardNavigation.TabNavigation="Local">
				<ContentPresenter x:Name="PART_SelectedContentHost"
				    Content="{Binding Path=SelectedContent, RelativeSource={RelativeSource TemplatedParent}}"
				    ContentSource="SelectedContent"
                    ContentTemplate="{Binding Path=ContentTemplate, RelativeSource={RelativeSource TemplatedParent}}"
				    SnapsToDevicePixels="{Binding Path=SnapsToDevicePixels, RelativeSource={RelativeSource TemplatedParent}}"
				    Margin="{Binding Path=Padding, RelativeSource={RelativeSource TemplatedParent}}"/>
			</Border>
		</Grid>
	</ControlTemplate>
	<!-- TabControl Style, defines the look of the TabControl-->
	<Style TargetType="{x:Type l:TabControl}">
		<Setter Property="KeyboardNavigation.TabNavigation" Value="Cycle"/>
		<Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle"/>

		<Setter Property="Background" Value="White"/>
		<Setter Property="BorderBrush" Value="{StaticResource TabBorderBrush}"/>
		<Setter Property="BorderThickness" Value="1"/>

		<Setter Property="TabItemNormalBackground" Value="{StaticResource TabItemNormalBackground}"/>
		<Setter Property="TabItemMouseOverBackground" Value="{StaticResource TabItemHoverBackground}"/>
		<Setter Property="TabItemSelectedBackground" Value="{StaticResource TabItemSelectedBackground}"/>

		<Setter Property="HorizontalContentAlignment" Value="Stretch" />
		<Setter Property="VerticalContentAlignment" Value="Stretch" />

		<Setter Property="SnapsToDevicePixels" Value="True"/>
		<Setter Property="Template" Value="{StaticResource TabControlTabPlacementTop}"/>
		<Style.Triggers>

			<Trigger Property="TabStripPlacement" Value="Bottom">
				<Setter Property="Template" Value="{StaticResource TabControlTabPlacementBottom}"/>
			</Trigger>

			<Trigger Property="TabStripPlacement" Value="Left">
				<Setter Property="TabItemMinWidth" Value="0"/>
				<Setter Property="TabItemMaxWidth" Value="150"/>

				<Setter Property="TabItemMinHeight" Value="20"/>
				<Setter Property="TabItemMaxHeight" Value="250"/>
				<Setter Property="Template" Value="{StaticResource TabControlTabPlacementLeft}"/>
			</Trigger>

			<Trigger Property="TabStripPlacement" Value="Right">
				<Setter Property="TabItemMinWidth" Value="0"/>
				<Setter Property="TabItemMaxWidth" Value="150"/>

				<Setter Property="TabItemMinHeight" Value="20"/>
				<Setter Property="TabItemMaxHeight" Value="250"/>
				<Setter Property="Template" Value="{StaticResource TabControlTabPlacementRight}"/>
			</Trigger>
		</Style.Triggers>
	</Style>
</ResourceDictionary>
